import urllib.request
import urllib.parse
import requests
from lxml import etree

##站长素材
# (1)请求对象定制
# (2)获取网页的原码
# (3)下载
# if __name__ == '__main__':

song_id = 0

# 获取sid的xpath语法
# //*[@id="musicList"]/li[*]/span[2]/a/@sid
headers2 = {
    'Accept': 'image/avif,image/webp,*/*',
    'Accept-Language': 'gzip, deflate',
    'Connection': 'keep-alive',
    # 'Cookie': '__yjs_duid=1_d15b1fa8ff67919d9ea41014eeebd0a91655470445556; blk=0; Hm_lvt_74e11efe27096f6ef1745cd53f168168=1655470445; Hm_lpvt_74e11efe27096f6ef1745cd53f168168=',
    'Range': 'bytes=34816-',
    'Referer': 'https://www.htqyy.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0'
}


def creat_request(index):
    # http://www.htqyy.com/top/musicList/hot?pageIndex=0&pageSize=20
    url = 'http://www.htqyy.com/top/musicList/hot?pageIndex=' + str(index) + '&pageSize=20'
    # print(url)
    # 请求对象的定制
    request = urllib.request.Request(url=url, headers=headers2)
    return request


def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    # 这个是可以打印我们的页面的源码
    # print(content)
    return content


# 我们爬取到的其实和真实的下载地址不一样导致我们们报错
# http://f3.htqyy.com/play9/261/mp3/6
# 下载图片
# http://f3.htqyy.com/play9/33/mp3/6
# http://f3.htqyy.com/play9/261/mp3/6
# http://f3.htqyy.com/play9/33/mp3/6
def down_load(content, index):
    # 通过网页原码来解析我们的数据
    # 这个是将我们的数据换成我们的 一个可以进行操作的html对象
    tree = etree.HTML(content)
    xpath2 = '//*[@class="s' + str(index * 20) + '"]/li[*]/span[2]/a/@title'
    sonName_list = tree.xpath(xpath2)
    # 一般设计到图片的网站都会涉及到懒加载 这个不一样的 不一定是又懒加载 这个不是一定的 但是当和你的预期不一样的时候我们就要考虑懒加载
    # 你认为是我们的src 实际上当其加载出来的时候我们就要将我们的数据设置为src2
    xpath2 = '//*[@class="s' + str(index * 20) + '"]/li[*]/span[2]/a/@sid'
    sid_list = tree.xpath(xpath2)
    music_src = 'http://f3.htqyy.com/play9/{}/mp3/6'  # 进行拼接字符串实现

    for i in range(len(sid_list)):
        # 拼接url
        global song_id
        print(sid_list[i])
        music_src = music_src.format(sid_list[i])
        data = requests.get(music_src, params="", headers=headers2)
        print('正在下载第', song_id + 1, "首歌")
        song_id = song_id + 1
        music_src = 'http://f3.htqyy.com/play9/{}/mp3/6'

        with open("D:\\deleteAnyTime\\爬虫获取的数据\\music\\{}.mp3".format(sonName_list[i]), "wb") as f:
            f.write(data.content)


if __name__ == '__main__':
    # print(page)
    # (1)请求对象定制
    # 共有25页 可以进行下载
    for i in range(4):
        request = creat_request(i)
        # (2)获取网页的原码
        content = get_content(request)
        # (3)下载
        down_load(content, i)

# s0 http://www.htqyy.com/top/musicList/hot?pageIndex=0&pageSize=20
# s20  http://www.htqyy.com/top/musicList/hot?pageIndex=1&pageSize=20
# s40
